﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Controles;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.IO;
using System.Diagnostics;

namespace CapaPresentacion
{
    internal delegate void EvaluacionElegida(object obj, TipoEvaluacion tipo);
    internal delegate void ReiniciarCU(CasosDeUso cu);
    internal delegate void ReiniciarPagoCuota(object parameter);
    internal delegate void ModificarPagoCuota(object parameter);
    internal delegate void PagoCuotaAlumno(string mes, int año);
    internal delegate void IrMenuPrincipal(object parameter);

    internal delegate void EditarEntidad(CasosDeUso cu, Object entidad);

    internal class MainWindowViewModel
    {

        #region Variables
        private MainWindow view;  
     
        private RelayCommand nuevoAlumnoCommand;
        private RelayCommand buscarAlumnoCommand;
        private RelayCommand eliminarAlumnoCommand;
        private RelayCommand inscribirAlumnoCommand;
        private RelayCommand buscarInscripcionAlumnoCommand;
        private RelayCommand eliminarInscripcionAlumnoCommand;

        private RelayCommand evaluarAlumnoCommand;
        private RelayCommand buscarEvaluacionAlumnoCommand;
        private RelayCommand eliminarEvaluacionAlumnoCommand;

        private RelayCommand nuevoTurnoCommand;
        private RelayCommand buscarTurnoCommand;
        private RelayCommand eliminarTurnoCommand;

        private RelayCommand nuevoCicloLectivoCommand;
        private RelayCommand buscarCicloLectivoCommand;
        private RelayCommand eliminarCicloLectivoCommand;

        private RelayCommand nuevoProyectoDidacticoCommand;
        private RelayCommand buscarProyectoDidacticoCommand;
        private RelayCommand eliminarProyectoDidacticoCommand;

        private RelayCommand nuevaActividadDidacticaCommand;
        private RelayCommand buscarActividadDidacticaCommand;
        private RelayCommand eliminarActividadDidacticaCommand;

        private RelayCommand nuevoDiaFeriadoCommand;
        private RelayCommand buscarDiaFeriadoCommand;
        private RelayCommand eliminarDiaFeriadoCommand;

        private RelayCommand nuevaCategoriaGastoCommand;
        private RelayCommand buscarCategoriaGastoCommand;
        private RelayCommand eliminarCategoriaGastoCommand;

        private RelayCommand nuevoGastoCommand;
        private RelayCommand buscarGastoCommand;
        private RelayCommand eliminarGastoCommand;

        private RelayCommand nuevoFamiliarAlumnoCommand;
        private RelayCommand buscarFamiliarAlumnoCommand;
        private RelayCommand eliminarFamiliarAlumnoCommand;

        private RelayCommand periodoCuotaAlumnoCommand;
        private RelayCommand eliminarPagoInscripcionAlumnoCommand;

        private RelayCommand pagarInscripcionAlumnoCommand;
        private RelayCommand buscarPagoCuotaAlumnoCommand;
        private RelayCommand eliminarPagoCuotaAlumnoCommand;

        private RelayCommand listaAlumnosCommand;
        private RelayCommand informeInscripcionAlumnoCommand;
        private RelayCommand informeEvaluacionAlumnoCommand;
        private RelayCommand informePagoCuotaAlumnoCommand;
        private RelayCommand informeGastosCommand;
        private RelayCommand informePlanificacionProyectoDidacticoCommand;


        private RelayCommand nuevaPlanificacionProyectoDidacticoCommand;
        private RelayCommand buscarPlanificacionProyectoDidacticoCommand;
        private RelayCommand eliminarPlanificacionProyectoDidacticoCommand;

        private RelayCommand nuevoParametroGeneralCommand;
        private RelayCommand manualUsuarioCommand;

        private RelayCommand cancelarCommand;
        private RelayCommand irMenuPrincipalCommand;
        private RelayCommand acercaDeCommand;

        #endregion

        #region Propiedades

        public ICommand NuevoAlumnoCommand
        {
            get
            {
                return nuevoAlumnoCommand;
            }
        }

        public ICommand BuscarAlumnoCommand
        {
            get
            {
                return buscarAlumnoCommand;
            }
        }

        public ICommand EliminarAlumnoCommand
        {
            get
            {
                return eliminarAlumnoCommand;
            }
        }

        public ICommand NuevoFamiliarAlumnoCommand
        {
            get
            {
                return nuevoFamiliarAlumnoCommand;
            }
        }

        public ICommand BuscarFamiliarAlumnoCommand
        {
            get
            {
                return buscarFamiliarAlumnoCommand;
            }
        }

        public ICommand EliminarFamiliarAlumnoCommand
        {
            get
            {
                return eliminarFamiliarAlumnoCommand;
            }
        }


        public ICommand EvaluarAlumnoCommand
        {
            get
            {
                return evaluarAlumnoCommand;
            }
        }

        public ICommand BuscarEvaluacionAlumnoCommand
        {
            get
            {
                return buscarEvaluacionAlumnoCommand;
            }
        }

        public ICommand EliminarEvaluacionAlumnoCommand
        {
            get
            {
                return eliminarEvaluacionAlumnoCommand;
            }
        }


        public ICommand InscribirAlumnoCommand
        {
            get
            {
                return inscribirAlumnoCommand;
            }
        }

        public ICommand BuscarInscripcionAlumnoCommand
        {
            get
            {
                return buscarInscripcionAlumnoCommand;
            }
        }

        public ICommand EliminarInscripcionAlumnoCommand
        {
            get
            {
                return eliminarInscripcionAlumnoCommand;
            }
        }

        public ICommand CancelarCommand
        {
            get
            {
                return cancelarCommand;
            }
        }

        public ICommand IrMenuPrincipalCommand
        {
            get
            {
                return irMenuPrincipalCommand;
            }
        }

        public ICommand NuevoCicloLectivoCommand
        {
            get
            {
                return nuevoCicloLectivoCommand;
            }
        }

        public ICommand NuevoTurnoCommand
        {
            get
            {
                return nuevoTurnoCommand;
            }
        }

        public ICommand BuscarCicloLectivoCommand
        {
            get
            {
                return buscarCicloLectivoCommand;
            }
        }

        public ICommand BuscarTurnoCommand
        {
            get
            {
                return buscarTurnoCommand;
            }
        }


        public ICommand EliminarCicloLectivoCommand
        {
            get
            {
                return eliminarCicloLectivoCommand;
            }
        }

        public ICommand EliminarTurnoCommand
        {
            get
            {
                return eliminarTurnoCommand;
            }
        }

        public ICommand NuevoProyectoDidacticoCommand
        {
            get
            {
                return nuevoProyectoDidacticoCommand;
            }
        }

        public ICommand BuscarProyectoDidacticoCommand
        {
            get
            {
                return buscarProyectoDidacticoCommand;
            }
        }

        public ICommand EliminarProyectoDidacticoCommand
        {
            get
            {
                return eliminarProyectoDidacticoCommand;
            }
        }

        public ICommand NuevaActividadDidacticaCommand
        {
            get
            {
                return nuevaActividadDidacticaCommand;
            }
        }

        public ICommand BuscarActividadDidacticaCommand
        {
            get
            {
                return buscarActividadDidacticaCommand;
            }
        }

        public ICommand EliminarActividadDidacticaCommand
        {
            get
            {
                return eliminarActividadDidacticaCommand;
            }
        }

        public ICommand NuevaCategoriaGastoCommand
        {
            get
            {
                return nuevaCategoriaGastoCommand;
            }
        }

        public ICommand BuscarCategoriaGastoCommand
        {
            get
            {
                return buscarCategoriaGastoCommand;
            }
        }

        public ICommand EliminarCategoriaGastoCommand
        {
            get
            {
                return eliminarCategoriaGastoCommand;
            }
        }

        public ICommand NuevoDiaFeriadoCommand
        {
            get
            {
                return nuevoDiaFeriadoCommand;
            }
        }

        public ICommand BuscarDiaFeriadoCommand
        {
            get
            {
                return buscarDiaFeriadoCommand;
            }
        }

        public ICommand EliminarDiaFeriadoCommand
        {
            get
            {
                return eliminarDiaFeriadoCommand;
            }
        }


        public ICommand NuevoGastoCommand
        {
            get
            {
                return nuevoGastoCommand;
            }
        }

        public ICommand BuscarGastoCommand
        {
            get
            {
                return buscarGastoCommand;
            }
        }

        public ICommand EliminarGastoCommand
        {
            get
            {
                return eliminarGastoCommand;
            }
        }

        public ICommand PeriodoCuotaAlumnoCommand
        {
            get
            {
                return periodoCuotaAlumnoCommand;
            }
        }
                
        public ICommand BuscarPagoCuotaAlumnoCommand
        {
            get
            {
                return buscarPagoCuotaAlumnoCommand;
            }
        }

        public ICommand EliminarPagoCuotaAlumnoCommand
        {
            get
            {
                return eliminarPagoCuotaAlumnoCommand;
            }
        }

        public ICommand PagarInscripcionAlumnoCommand
        {
            get
            {
                return pagarInscripcionAlumnoCommand;
            }
        }

        public ICommand EliminarPagoInscripcionAlumnoCommand
        {
            get
            {
                return eliminarPagoInscripcionAlumnoCommand;
            }
        }


        public ICommand ListaAlumnosCommand
        {
            get
            {
                return listaAlumnosCommand;
            }
        }

        public ICommand InformeInscripcionAlumnoCommand
        {
            get
            {
                return informeInscripcionAlumnoCommand;
            }
        }

        public ICommand InformeEvaluacionAlumnoCommand
        {
            get
            {
                return informeEvaluacionAlumnoCommand;
            }
        }

        public ICommand InformePagoCuotaAlumnoCommand
        {
            get
            {
                return informePagoCuotaAlumnoCommand;
            }
        }

        public ICommand InformeGastosCommand
        {
            get
            {
                return informeGastosCommand;
            }
        }
        public ICommand InformePlanificacionProyectoDidacticoCommand
        {
            get
            {
                return informePlanificacionProyectoDidacticoCommand;
            }
        }
                

        public ICommand NuevaPlanificacionProyectoDidacticoCommand
        {
            get
            {
                return nuevaPlanificacionProyectoDidacticoCommand;
            }
        }

        public ICommand BuscarPlanificacionProyectoDidacticoCommand
        {
            get
            {
                return buscarPlanificacionProyectoDidacticoCommand;
            }
        }

        public ICommand EliminarPlanificacionProyectoDidacticoCommand
        {
            get
            {
                return eliminarPlanificacionProyectoDidacticoCommand;
            }
        }

        public ICommand NuevoParametroGeneralCommand
        {
            get
            {
                return nuevoParametroGeneralCommand;
            }
        }

        public ICommand AcercaDeCommand
        {
            get
            {
                return acercaDeCommand;
            }
        }

        public ICommand ManualUsuarioCommand
        {
            get
            {
                return manualUsuarioCommand;
            }
        }
        
        

        public MainWindow MainWindow
        {
            get { return view; }
            set { view = value; }
        }

        #endregion

        #region Constructores

        public MainWindowViewModel() { }

        public MainWindowViewModel(MainWindow view)
        {
            this.view = view;

            this.nuevoAlumnoCommand = new RelayCommand(NuevoAlumno_Click);
            this.buscarAlumnoCommand = new RelayCommand(BuscarAlumno);
            this.eliminarAlumnoCommand = new RelayCommand(EliminarAlumno);

            this.nuevoFamiliarAlumnoCommand = new RelayCommand(NuevoFamiliarAlumno_Click);
            this.buscarFamiliarAlumnoCommand = new RelayCommand(BuscarFamiliarAlumno);
            this.eliminarFamiliarAlumnoCommand = new RelayCommand(EliminarFamiliarAlumno);

            this.inscribirAlumnoCommand = new RelayCommand(InscribirAlumno_Click);
            this.buscarInscripcionAlumnoCommand = new RelayCommand(BuscarInscripcionAlumno);
            this.eliminarInscripcionAlumnoCommand = new RelayCommand(EliminarInscripcionAlumno);

            this.evaluarAlumnoCommand = new RelayCommand(ElegirTipoEvaluacion);
            this.buscarEvaluacionAlumnoCommand = new RelayCommand(BuscarEvaluacion);
            this.eliminarEvaluacionAlumnoCommand = new RelayCommand(EliminarEvaluacion);
            
            this.nuevoCicloLectivoCommand = new RelayCommand(NuevoCicloLectivo_Click);
            this.buscarCicloLectivoCommand = new RelayCommand(BuscarCicloLectivo);
            this.eliminarCicloLectivoCommand = new RelayCommand(EliminarCicloLectivo);

            this.nuevoTurnoCommand = new RelayCommand(NuevoTurno_Click);
            this.buscarTurnoCommand = new RelayCommand(BuscarTurno);
            this.eliminarTurnoCommand = new RelayCommand(EliminarTurno);

            this.nuevoDiaFeriadoCommand = new RelayCommand(NuevoDiaFeriado_Click);
            this.buscarDiaFeriadoCommand = new RelayCommand(BuscarDiaFeriado);
            this.eliminarDiaFeriadoCommand = new RelayCommand(EliminarDiaFeriado);

            this.nuevoProyectoDidacticoCommand = new RelayCommand(NuevoProyectoDidactico_Click);
            this.buscarProyectoDidacticoCommand = new RelayCommand(BuscarProyectoDidactico);
            this.eliminarProyectoDidacticoCommand = new RelayCommand(EliminarProyectoDidactico);

            this.nuevaActividadDidacticaCommand = new RelayCommand(NuevaActividadDidactica_Click);
            this.buscarActividadDidacticaCommand = new RelayCommand(BuscarActividadDidactica);
            this.eliminarActividadDidacticaCommand = new RelayCommand(EliminarActividadDidactica);

            this.nuevaCategoriaGastoCommand = new RelayCommand(NuevaCategoriaGasto_Click);
            this.buscarCategoriaGastoCommand = new RelayCommand(BuscarCategoriaGasto);
            this.eliminarCategoriaGastoCommand = new RelayCommand(EliminarCategoriaGasto);

            this.nuevoGastoCommand = new RelayCommand(NuevoGasto_Click);
            this.buscarGastoCommand = new RelayCommand(BuscarGasto);
            this.eliminarGastoCommand = new RelayCommand(EliminarGasto);

            this.periodoCuotaAlumnoCommand = new RelayCommand(PeriodoCuotaAlumno);
            this.buscarPagoCuotaAlumnoCommand = new RelayCommand(BuscarPagoCuotaAlumno);
            this.eliminarPagoCuotaAlumnoCommand = new RelayCommand(EliminarPagoCuotaAlumno);

            this.pagarInscripcionAlumnoCommand = new RelayCommand(NuevoPagoInscripcionAlumno);
            this.eliminarPagoInscripcionAlumnoCommand = new RelayCommand(EliminarPagoInscripcionAlumno);

            this.listaAlumnosCommand = new RelayCommand(InformeListaAlumnos);
            this.informeInscripcionAlumnoCommand = new RelayCommand(InformeInscripcionAlumno);
            this.informeEvaluacionAlumnoCommand = new RelayCommand(InformeEvaluacionAlumno);
            this.informePagoCuotaAlumnoCommand = new RelayCommand(InformePagoCuota);
            this.informeGastosCommand = new RelayCommand(InformeGastos);
            this.informePlanificacionProyectoDidacticoCommand = new RelayCommand(InformePlanificacionDidactica);

            this.nuevaPlanificacionProyectoDidacticoCommand = new RelayCommand(RealizarPlanificacionProyectoDidactico_Click);
            this.buscarPlanificacionProyectoDidacticoCommand = new RelayCommand(BuscarPlanificacionProyectoDidactico);
            this.eliminarPlanificacionProyectoDidacticoCommand = new RelayCommand(EliminarPlanificacionProyectoDidactico);

            this.nuevoParametroGeneralCommand = new RelayCommand(NuevoParametroGeneral_Click);
            this.manualUsuarioCommand = new RelayCommand(VerManualUsuario);  

            this.cancelarCommand = new RelayCommand(Cancelar_Accion);
            this.irMenuPrincipalCommand = new RelayCommand(IrMenuPrincipal);
            this.acercaDeCommand = new RelayCommand(AcercaDe);

        }

        #endregion

        // Todos los {Binding } que no tengan seteada la propiedad Source, bindean contra el DataContext. Se le setea solo el Path.


        private void Cancelar_Accion(Object parameter)
        {
            if (MessageBox.Show("¿Está seguro que desea cancelar y volver a la pantalla principal?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                view.PanelPrincipal.Children.RemoveAt(1);
                view.PanelPrincipal.Children.Add(view.logo);
            }
        }

        private void IrMenuPrincipal(Object parameter)
        {
            if (view.PanelPrincipal.Children.Count > 1)
            {
                view.PanelPrincipal.Children.RemoveAt(1);
                view.PanelPrincipal.Children.Add(view.logo);
            }
            else
                view.PanelPrincipal.Children.Add(view.logo);
        }

        private void AcercaDe(Object parameter)
        {
            if (view.PanelPrincipal.Children.Count > 1)
            {
                view.PanelPrincipal.Children.RemoveAt(1);
                view.PanelPrincipal.Children.Add(view.logo);

            }

            VentanaAcercaDe nueva = new VentanaAcercaDe();        
            nueva.ShowDialog();

        }


         private void NuevoAlumno_Click(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             NuevoAlumno nuevoAlumno = new NuevoAlumno();
             NuevoAlumnoViewModel naVM = new NuevoAlumnoViewModel();
             naVM.ReiniciarCU += this.OnReiniciarCU;

             if (parameter == null)
             {
                 naVM.Inicializar(nuevoAlumno);
             }
             else
             {
                 naVM.Inicializar(nuevoAlumno, parameter as Alumno);
             }

             nuevoAlumno.DataContext = naVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevoAlumno);

         }

         private void BuscarAlumno(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaAlumno nueva = new VentanaBusquedaAlumno();
             VentanaBusquedaAlumnoViewModel vbaVM = new VentanaBusquedaAlumnoViewModel(nueva);

             nueva.DataContext = vbaVM;
             vbaVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void EliminarAlumno(Object parameter)
         {
            
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaAlumno nueva = new VentanaBusquedaAlumno();
             VentanaBusquedaAlumnoViewModel vbaVM = new VentanaBusquedaAlumnoViewModel(nueva, "Eliminar");

             nueva.DataContext = vbaVM;          

             nueva.ShowDialog();

         }



        private void NuevoFamiliarAlumno_Click(Object parameter)
        {
            if (view.PanelPrincipal.Children.Count > 1)
                view.PanelPrincipal.Children.RemoveAt(1);

            NuevoFamiliarAlumno nuevoFamiliarAlumno = new NuevoFamiliarAlumno();
            NuevoFamiliarAlumnoViewModel nfaVM;

            if (parameter == null)
            {
                nfaVM = new NuevoFamiliarAlumnoViewModel();
            }
            else
            {
                nfaVM = new NuevoFamiliarAlumnoViewModel(parameter as Familiar);
            }

            nuevoFamiliarAlumno.DataContext = nfaVM;
            nfaVM.ReiniciarCU += this.OnReiniciarCU;

            if (view.PanelPrincipal.Children.Count == 1)
                view.PanelPrincipal.Children.Add(nuevoFamiliarAlumno);

        }

        private void BuscarFamiliarAlumno(Object parameter)
        {

            if (view.PanelPrincipal.Children.Count > 1)
            {
                view.PanelPrincipal.Children.RemoveAt(1);
                view.PanelPrincipal.Children.Add(view.logo);

            }

            VentanaBusquedaFamiliar nueva = new VentanaBusquedaFamiliar();
            VentanaBusquedaFamiliarViewModel vbfVM = new VentanaBusquedaFamiliarViewModel(nueva);

            nueva.DataContext = vbfVM;
            vbfVM.EditarEntidad += this.OnEditarEntidad;

            nueva.ShowDialog();

        }

        private void EliminarFamiliarAlumno(Object parameter)
        {
            if (view.PanelPrincipal.Children.Count > 1)
            {
                view.PanelPrincipal.Children.RemoveAt(1);
                view.PanelPrincipal.Children.Add(view.logo);

            }

            VentanaBusquedaFamiliar nueva = new VentanaBusquedaFamiliar();
            VentanaBusquedaFamiliarViewModel vbfVM = new VentanaBusquedaFamiliarViewModel(nueva, "Eliminar");

            nueva.DataContext = vbfVM;

            nueva.ShowDialog();

        }
                

        private void ElegirTipoEvaluacion(Object parameter)
        {
            if (new InscripcionAlumnoLogica().ExistenInscriptos())
            {

                if (new InscripcionAlumnoLogica().ExistenAlumnosSinEvaluar())
                {

                    VentanaTipoEvaluacion nueva = new VentanaTipoEvaluacion();
                    VentanaTipoEvaluacionViewModel vteVM = new VentanaTipoEvaluacionViewModel(nueva);

                    nueva.DataContext = vteVM;
                    vteVM.EvaluacionElegida += this.EvaluarAlumno_Click;

                    nueva.ShowDialog();
                }
                else
                {
                    VentanaAviso nuevaVentana = new VentanaAviso(true, "Se ha producido un error", "    Todos los alumnos inscriptos al ciclo lectivo  \n  del año en curso tienen creada una evaluación");
                    nuevaVentana.ShowDialog();

                    if (view.PanelPrincipal.Children.Count > 1)
                    {
                        view.PanelPrincipal.Children.RemoveAt(1);
                        view.PanelPrincipal.Children.Add(view.logo);
                    }

                }
            }
            else
            {

                VentanaAviso nuevaVentana = new VentanaAviso(true, "Se ha producido un error", "No existen alumnos inscriptos al ciclo lectivo del año en curso");
                nuevaVentana.ShowDialog();

                if (view.PanelPrincipal.Children.Count > 1)
                {
                    view.PanelPrincipal.Children.RemoveAt(1);
                    view.PanelPrincipal.Children.Add(view.logo);
                }
            }
        }


         private void EvaluarAlumno_Click(Object parameter, TipoEvaluacion tipo)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             switch(tipo)
             {
                 case TipoEvaluacion.UnoDosAños:

                     EvaluarAlumno1añoViewModel ea1añoVM;
                     EvaluarAlumno1año evaluarAlumno1año = new EvaluarAlumno1año();

                     
                     if(parameter == null)
                         ea1añoVM = new EvaluarAlumno1añoViewModel(evaluarAlumno1año);
                     else
                         ea1añoVM = new EvaluarAlumno1añoViewModel(evaluarAlumno1año, parameter as EvaluacionAlumno);

                     evaluarAlumno1año.DataContext = ea1añoVM;
                     ea1añoVM.ReiniciarCU += this.OnReiniciarCU;


                     if (view.PanelPrincipal.Children.Count == 1)
                         view.PanelPrincipal.Children.Add(evaluarAlumno1año);
                     
                 break;

                 case TipoEvaluacion.TresCuatroCincoAños:

                     EvaluarAlumno3añosViewModel ea3añosVM;
                     EvaluarAlumno3años evaluarAlumno3años = new EvaluarAlumno3años();

                     if (parameter == null)
                         ea3añosVM = new EvaluarAlumno3añosViewModel(evaluarAlumno3años);
                     else
                         ea3añosVM = new EvaluarAlumno3añosViewModel(evaluarAlumno3años, parameter as EvaluacionAlumno);                

                     evaluarAlumno3años.DataContext = ea3añosVM;
                     ea3añosVM.ReiniciarCU += this.OnReiniciarCU;

                     if (view.PanelPrincipal.Children.Count == 1)
                         view.PanelPrincipal.Children.Add(evaluarAlumno3años);
                 
                break;

                 case TipoEvaluacion.Ninguna:

                     Evaluacion Eva = (Evaluacion)parameter;

                     if (Eva.TipoEvaluacion == TipoEvaluacion.UnoDosAños.ToString())
                     {
                         EvaluarAlumno1añoViewModel eaVM;
                         EvaluarAlumno1año evaluarAlumno = new EvaluarAlumno1año();

                         eaVM = new EvaluarAlumno1añoViewModel(evaluarAlumno, parameter as EvaluacionAlumno);

                         evaluarAlumno.DataContext = eaVM;
                         eaVM.ReiniciarCU += this.OnReiniciarCU;

                         if (view.PanelPrincipal.Children.Count == 1)
                             view.PanelPrincipal.Children.Add(evaluarAlumno);

                     }
                     else
                     {
                         EvaluarAlumno3añosViewModel eaVM;
                         EvaluarAlumno3años evaluarAlumno = new EvaluarAlumno3años();

                         eaVM = new EvaluarAlumno3añosViewModel(evaluarAlumno, parameter as EvaluacionAlumno);

                         evaluarAlumno.DataContext = eaVM;
                         eaVM.ReiniciarCU += this.OnReiniciarCU;

                         if (view.PanelPrincipal.Children.Count == 1) 
                             view.PanelPrincipal.Children.Add(evaluarAlumno);

                     }
                 break;
                     
             }           

         }


         private void BuscarEvaluacion(Object parameter)
         {

             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaEvaluacion nueva = new VentanaBusquedaEvaluacion();
             VentanaBusquedaEvaluacionViewModel vbeVM = new VentanaBusquedaEvaluacionViewModel(nueva);

             nueva.DataContext = vbeVM;
             vbeVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void EliminarEvaluacion(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaEvaluacion nueva = new VentanaBusquedaEvaluacion();
             VentanaBusquedaEvaluacionViewModel vbeVM = new VentanaBusquedaEvaluacionViewModel(nueva, "Eliminar");

             nueva.DataContext = vbeVM;

             nueva.ShowDialog();

         }


         private void NuevoCicloLectivo_Click(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             NuevoCicloLectivo nuevoCicloLectivo = new NuevoCicloLectivo();
             NuevoCicloLectivoViewModel nclVM;
             if (parameter == null)
             {  
                 nclVM = new NuevoCicloLectivoViewModel();
             }
             else
             {
                 nclVM = new NuevoCicloLectivoViewModel(parameter as CicloLectivo);

             }

             nuevoCicloLectivo.DataContext = nclVM;
             nclVM.ReiniciarCU += this.OnReiniciarCU;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevoCicloLectivo);

         }

         private void BuscarCicloLectivo(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }
            
             VentanaBusquedaCicloLectivo nueva = new VentanaBusquedaCicloLectivo();
             VentanaBusquedaCicloLectivoViewModel vclVM = new VentanaBusquedaCicloLectivoViewModel(nueva);

             nueva.DataContext = vclVM;
             vclVM.EditarEntidad += this.OnEditarEntidad;
                         
             nueva.ShowDialog();
            
         }

         private void EliminarCicloLectivo(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaCicloLectivo nueva = new VentanaBusquedaCicloLectivo();
             VentanaBusquedaCicloLectivoViewModel vclVM = new VentanaBusquedaCicloLectivoViewModel(nueva, "Eliminar");

             nueva.DataContext = vclVM;
             vclVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }


         private void NuevoTurno_Click(Object parameter)
         {

             if(view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             NuevoTurno nuevoTurno = new NuevoTurno();
             NuevoTurnoViewModel ntVM = new NuevoTurnoViewModel();
             ntVM.ReiniciarCU += this.OnReiniciarCU;

             if (parameter == null)
             {
                 ntVM.inicializar();
             }
             else
             {
                 ntVM.inicializar(parameter as Turno);
             }

             nuevoTurno.DataContext = ntVM;
             

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevoTurno);

         }

         private void BuscarTurno(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaTurno nueva = new VentanaBusquedaTurno();
             VentanaBusquedaTurnoViewModel vbtVM = new VentanaBusquedaTurnoViewModel(nueva);

             nueva.DataContext = vbtVM;
             vbtVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void EliminarTurno(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaTurno nueva = new VentanaBusquedaTurno();
             VentanaBusquedaTurnoViewModel vbtVM = new VentanaBusquedaTurnoViewModel(nueva, "Eliminar");

             nueva.DataContext = vbtVM;
             vbtVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void NuevoGasto_Click(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             NuevoGasto nuevoGasto = new NuevoGasto();
             NuevoGastoViewModel ngVM = new NuevoGastoViewModel();
            ngVM.ReiniciarCU += this.OnReiniciarCU;

             if (parameter == null)
             {
                 ngVM.Inicializar(nuevoGasto);
             }
             else
             {
                 ngVM.Inicializar(nuevoGasto, parameter as Gasto);
             }

             nuevoGasto.DataContext = ngVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevoGasto);

         }

         private void BuscarGasto(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaGasto nueva = new VentanaBusquedaGasto();
             VentanaBusquedaGastoViewModel vbgVM = new VentanaBusquedaGastoViewModel(nueva);

             nueva.DataContext = vbgVM;
             vbgVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void EliminarGasto(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaGasto nueva = new VentanaBusquedaGasto();
             VentanaBusquedaGastoViewModel vbgVM = new VentanaBusquedaGastoViewModel(nueva, "Eliminar");

             nueva.DataContext = vbgVM;
             vbgVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void InscribirAlumno_Click(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             InscribirAlumno inscribirAlumno = new InscribirAlumno();

             InscribirAlumnoViewModel iaVM = new InscribirAlumnoViewModel();
             iaVM.ReiniciarCU += this.OnReiniciarCU;

             if (parameter == null)
             {
                 iaVM.Inicializar(inscribirAlumno);
             }
             else
             {
                 iaVM.Inicializar(inscribirAlumno, parameter as InscripcionCicloLectivo);
             }

             
             inscribirAlumno.DataContext = iaVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(inscribirAlumno);
         }

         private void BuscarInscripcionAlumno(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaInscripciones nueva = new VentanaBusquedaInscripciones();
             VentanaBusquedaInscripcionesViewModel vbiVM = new VentanaBusquedaInscripcionesViewModel(nueva);

             nueva.DataContext = vbiVM;
             vbiVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void EliminarInscripcionAlumno(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaInscripciones nueva = new VentanaBusquedaInscripciones();
             VentanaBusquedaInscripcionesViewModel vbaVM = new VentanaBusquedaInscripcionesViewModel(nueva, "Eliminar");

             nueva.DataContext = vbaVM;

             nueva.ShowDialog();

         }

         private void NuevoProyectoDidactico_Click(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             NuevoProyectoDidactico nuevoProyectoDidactico = new NuevoProyectoDidactico();
             NuevoProyectoDidacticoViewModel npdVM;

             if (parameter == null)
             {
                 npdVM = new NuevoProyectoDidacticoViewModel();
             }
             else
             {
                 npdVM = new NuevoProyectoDidacticoViewModel(parameter as ProyectoDidactico);
             }

             nuevoProyectoDidactico.DataContext = npdVM;
             npdVM.ReiniciarCU += this.OnReiniciarCU;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevoProyectoDidactico);

         }

         private void BuscarProyectoDidactico(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaProyectoDidactico nueva = new VentanaBusquedaProyectoDidactico();
             VentanaBusquedaProyectoDidacticoViewModel vbpdVM = new VentanaBusquedaProyectoDidacticoViewModel(nueva);

             nueva.DataContext = vbpdVM;
             vbpdVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void EliminarProyectoDidactico(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaProyectoDidactico nueva = new VentanaBusquedaProyectoDidactico();
             VentanaBusquedaProyectoDidacticoViewModel vbpdVM = new VentanaBusquedaProyectoDidacticoViewModel(nueva, "Eliminar");

             nueva.DataContext = vbpdVM;
             vbpdVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void NuevaActividadDidactica_Click(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             NuevaActividad nuevaActividadDidactica = new NuevaActividad();
             NuevaActividadViewModel naVM;

             if (parameter == null)
             {
                 naVM = new NuevaActividadViewModel(nuevaActividadDidactica);
             }
             else
             {
                 naVM = new NuevaActividadViewModel(nuevaActividadDidactica, parameter as ActividadDidactica);
             }

             nuevaActividadDidactica.DataContext = naVM;
             naVM.ReiniciarCU += this.OnReiniciarCU;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevaActividadDidactica);

         }

         private void BuscarActividadDidactica(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaActividadDidactica nueva = new VentanaBusquedaActividadDidactica();
             VentanaBusquedaActividadDidacticaViewModel vbadVM = new VentanaBusquedaActividadDidacticaViewModel(nueva);

             nueva.DataContext = vbadVM;
             vbadVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void EliminarActividadDidactica(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaActividadDidactica nueva = new VentanaBusquedaActividadDidactica();
             VentanaBusquedaActividadDidacticaViewModel vbadVM = new VentanaBusquedaActividadDidacticaViewModel(nueva, "Eliminar");

             nueva.DataContext = vbadVM;
             vbadVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }



         private void NuevaCategoriaGasto_Click(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             NuevaCategoriaGasto nuevaCategoriaGasto = new NuevaCategoriaGasto();
             NuevaCategoriaGastoViewModel ncgVM;

             if (parameter == null)
             {
                 ncgVM = new NuevaCategoriaGastoViewModel();
             }
             else
             {
                 ncgVM = new NuevaCategoriaGastoViewModel(parameter as CategoriaGasto);
             }

             nuevaCategoriaGasto.DataContext = ncgVM;
             ncgVM.ReiniciarCU += this.OnReiniciarCU;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevaCategoriaGasto);

         }

         private void BuscarCategoriaGasto(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaCategoriaGasto nueva = new VentanaBusquedaCategoriaGasto();
             VentanaBusquedaCategoriaGastoViewModel vbcgVM = new VentanaBusquedaCategoriaGastoViewModel(nueva);

             nueva.DataContext = vbcgVM;
             vbcgVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void EliminarCategoriaGasto(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaCategoriaGasto nueva = new VentanaBusquedaCategoriaGasto();
             VentanaBusquedaCategoriaGastoViewModel vbcgVM = new VentanaBusquedaCategoriaGastoViewModel(nueva, "Eliminar");

             nueva.DataContext = vbcgVM;
             vbcgVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void PeriodoCuotaAlumno(Object parameter)
         {

             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaPeriodoPagoCuota nueva = new VentanaPeriodoPagoCuota();
             VentanaPeriodoPagoCuotaViewModel vppcVM = new VentanaPeriodoPagoCuotaViewModel();

             vppcVM.ReiniciarCU += this.OnReiniciarCU;

             if (vppcVM.Inicializar(nueva))
             {
                 nueva.DataContext = vppcVM;
                 vppcVM.PagoCuotaAlumno += this.PagarCuotaAlumno_Click;

                 nueva.ShowDialog();
             }

         }

         private void PagarCuotaAlumno_Click(string mes, int año)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             PagarCuotaAlumno nuevaCuota = new PagarCuotaAlumno();
             PagarCuotaAlumnoViewModel pcaVM = new PagarCuotaAlumnoViewModel(nuevaCuota, mes, año);

             pcaVM.ReiniciarPagoCuota += this.PeriodoCuotaAlumno;
             pcaVM.ModificarPagoCuota += this.BuscarPagoCuotaAlumno;
             pcaVM.IrMenuPrincipal += this.IrMenuPrincipal;

             nuevaCuota.DataContext = pcaVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevaCuota);

         }

         private void PagarCuotaAlumno_Click(object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             PagarCuotaAlumno nuevaCuota = new PagarCuotaAlumno();
             PagarCuotaAlumnoViewModel pcaVM = new PagarCuotaAlumnoViewModel(nuevaCuota, parameter as CuotaAlumno);

             pcaVM.ReiniciarPagoCuota += this.PeriodoCuotaAlumno;
             pcaVM.ModificarPagoCuota += this.BuscarPagoCuotaAlumno;
             pcaVM.IrMenuPrincipal += this.IrMenuPrincipal;

             nuevaCuota.DataContext = pcaVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevaCuota);

         }


         private void BuscarPagoCuotaAlumno(Object parameter)
         {

             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaPagoCuotaAlumno nueva = new VentanaBusquedaPagoCuotaAlumno();
             VentanaBusquedaPagoCuotaAlumnoViewModel vbpcVM = new VentanaBusquedaPagoCuotaAlumnoViewModel(nueva);

             nueva.DataContext = vbpcVM;
             vbpcVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }


         private void InformeListaAlumnos(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             ReporteListaAlumnos reporte = new ReporteListaAlumnos();
             ReporteListaAlumnosViewModel rlaVM = new ReporteListaAlumnosViewModel();

             rlaVM.ReiniciarCU += this.OnReiniciarCU;
                 
             rlaVM.Inicializar(reporte);

             reporte.DataContext = rlaVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(reporte);

         }



         private void InformeInscripcionAlumno(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             ReporteInscripcionAlumno reporte = new ReporteInscripcionAlumno();
             ReporteInscripcionAlumnoViewModel riaVM = new ReporteInscripcionAlumnoViewModel();

             riaVM.ReiniciarCU += this.OnReiniciarCU;

             riaVM.Inicializar(reporte);

             reporte.DataContext = riaVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(reporte);

         }

         private void InformeEvaluacionAlumno(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             ReporteEvaluacionAlumno reporte = new ReporteEvaluacionAlumno();
             ReporteEvaluacionAlumnoViewModel reaVM = new ReporteEvaluacionAlumnoViewModel();

             reaVM.ReiniciarCU += this.OnReiniciarCU;

             reaVM.Inicializar(reporte);

             reporte.DataContext = reaVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(reporte);

         }


         private void InformePagoCuota(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             ReportePagoCuotas reporte = new ReportePagoCuotas();
             ReportePagoCuotasViewModel rpcVM = new ReportePagoCuotasViewModel();

             rpcVM.ReiniciarCU += this.OnReiniciarCU;

             rpcVM.Inicializar(reporte);

             reporte.DataContext = rpcVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(reporte);

         }


         private void InformeGastos(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             ReporteGastos reporte = new ReporteGastos();
             ReporteGastosViewModel rpcVM = new ReporteGastosViewModel();

             rpcVM.ReiniciarCU += this.OnReiniciarCU;

             rpcVM.Inicializar(reporte);

             reporte.DataContext = rpcVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(reporte);

         }


         private void InformePlanificacionDidactica(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             ReportePlanificaciónProyectoDidáctico reporte = new ReportePlanificaciónProyectoDidáctico();
             ReportePlanificaciónProyectoDidácticoViewModel rpcVM = new ReportePlanificaciónProyectoDidácticoViewModel();

             rpcVM.ReiniciarCU += this.OnReiniciarCU;

             rpcVM.Inicializar(reporte);

             reporte.DataContext = rpcVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(reporte);

         }

         private void EliminarPagoCuotaAlumno(Object parameter)
         {

             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaPagoCuotaAlumno nueva = new VentanaBusquedaPagoCuotaAlumno();
             VentanaBusquedaPagoCuotaAlumnoViewModel vbpcVM = new VentanaBusquedaPagoCuotaAlumnoViewModel(nueva, "Eliminar");

             nueva.DataContext = vbpcVM;
             vbpcVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void RealizarPlanificacionProyectoDidactico_Click(Object parameter)
         {

             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             RealizarPlanificaciónProyectoDidáctico nuevaPlanificacion= new RealizarPlanificaciónProyectoDidáctico();
             RealizarPlanificaciónProyectoDidácticoViewModel rppdVM = new RealizarPlanificaciónProyectoDidácticoViewModel();

             rppdVM.ReiniciarCU += this.OnReiniciarCU;

             if (parameter == null)
             {
                 rppdVM.Inicializar(nuevaPlanificacion);
             }
             else
             {
                 rppdVM.Inicializar(nuevaPlanificacion, parameter as PlanificacionProyectoDidactico);
             }

             nuevaPlanificacion.DataContext = rppdVM;
             

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevaPlanificacion);


         }


         private void BuscarPlanificacionProyectoDidactico(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaPlanificacionProyectoDidactico nueva = new VentanaBusquedaPlanificacionProyectoDidactico();
             VentanaBusquedaPlanificacionProyectoDidacticoViewModel vbppd = new VentanaBusquedaPlanificacionProyectoDidacticoViewModel(nueva);

             nueva.DataContext = vbppd;
             vbppd.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void EliminarPlanificacionProyectoDidactico(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaPlanificacionProyectoDidactico nueva = new VentanaBusquedaPlanificacionProyectoDidactico();
             VentanaBusquedaPlanificacionProyectoDidacticoViewModel vbppd = new VentanaBusquedaPlanificacionProyectoDidacticoViewModel(nueva, "Eliminar");

             nueva.DataContext = vbppd;
             vbppd.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }


         private void NuevoDiaFeriado_Click(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             NuevoDiaFeriado nuevoDiaFeriado = new NuevoDiaFeriado();
             NuevoDiaFeriadoViewModel ndfVM;

             if (parameter == null)
             {
                 ndfVM = new NuevoDiaFeriadoViewModel(nuevoDiaFeriado);
             }
             else
             {
                 ndfVM = new NuevoDiaFeriadoViewModel(nuevoDiaFeriado, parameter as DiaFeriado);
             }

             ndfVM.ReiniciarCU += this.OnReiniciarCU;
             nuevoDiaFeriado.DataContext = ndfVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevoDiaFeriado);

         }

         private void BuscarDiaFeriado(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);

             }

             VentanaBusquedaDiaFeriado nueva = new VentanaBusquedaDiaFeriado();
             VentanaBusquedaDiaFeriadoViewModel vbgVM = new VentanaBusquedaDiaFeriadoViewModel(nueva);

             nueva.DataContext = vbgVM;
             vbgVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }



       private void NuevoParametroGeneral_Click(Object parameter)
       {

           if (view.PanelPrincipal.Children.Count > 1)
               view.PanelPrincipal.Children.RemoveAt(1);

           NuevoParametroGeneral nuevoParametro = new NuevoParametroGeneral();
           NuevoParametroGeneralViewModel npgVM = new NuevoParametroGeneralViewModel();

           npgVM.ReiniciarCU += this.OnReiniciarCU;
           npgVM.Inicializar();

           nuevoParametro.DataContext = npgVM;

           if (view.PanelPrincipal.Children.Count == 1)
               view.PanelPrincipal.Children.Add(nuevoParametro);

       }

         private void EliminarDiaFeriado(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaDiaFeriado nueva = new VentanaBusquedaDiaFeriado();
             VentanaBusquedaDiaFeriadoViewModel vbgVM = new VentanaBusquedaDiaFeriadoViewModel(nueva, "Eliminar");

             nueva.DataContext = vbgVM;
             vbgVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }

         private void NuevoPagoInscripcionAlumno(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
                 view.PanelPrincipal.Children.RemoveAt(1);

             PagarInscripcionAlumno nuevoPagoInscripcion = new PagarInscripcionAlumno();
             PagarInscripcionAlumnoViewModel npiVM = new PagarInscripcionAlumnoViewModel();
             npiVM.ReiniciarCU += this.OnReiniciarCU;
             npiVM.IrMenuPrincipal += this.IrMenuPrincipal;

             npiVM.Inicializar(nuevoPagoInscripcion);
             nuevoPagoInscripcion.DataContext = npiVM;

             if (view.PanelPrincipal.Children.Count == 1)
                 view.PanelPrincipal.Children.Add(nuevoPagoInscripcion);

         }

         private void EliminarPagoInscripcionAlumno(Object parameter)
         {
             if (view.PanelPrincipal.Children.Count > 1)
             {
                 view.PanelPrincipal.Children.RemoveAt(1);
                 view.PanelPrincipal.Children.Add(view.logo);
             }

             VentanaBusquedaPagoInscripciones nueva = new VentanaBusquedaPagoInscripciones();
             VentanaBusquedaPagoInscripcionesViewModel vbgVM = new VentanaBusquedaPagoInscripcionesViewModel(nueva);

             nueva.DataContext = vbgVM;
             vbgVM.EditarEntidad += this.OnEditarEntidad;

             nueva.ShowDialog();

         }


         private void VerManualUsuario(Object parameter)
         {
             try{
             string path = "C:\\ManualUsuario.pdf";
             Process P = new Process
             {
                 StartInfo = { FileName = "AcroRd32.exe", Arguments = path }
             };
             P.Start();
             }
             catch (Exception)
             {
                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No es posible mostrar el manual de usuario");
                 nueva.ShowDialog();


             }

         }

         private void OnReiniciarCU(CasosDeUso cu)
         {
             switch (cu)
             {
                 case CasosDeUso.NuevoAlumno:
                     NuevoAlumno_Click(null);
                     break;

                 case CasosDeUso.BuscarAlumno:
                     BuscarAlumno(null);
                     break;

                 case CasosDeUso.NuevoFamiliarAlumno:
                     NuevoFamiliarAlumno_Click(null);
                     break;

                 case CasosDeUso.BuscarFamiliarAlumno:
                     BuscarFamiliarAlumno(null);
                     break;

                 case CasosDeUso.InscribirAlumno:
                     InscribirAlumno_Click(null);
                     break;

                 case CasosDeUso.BuscarInscripcion:
                     BuscarInscripcionAlumno(null);
                     break;

                 case CasosDeUso.EvaluarAlumno:
                     ElegirTipoEvaluacion(null);
                     break;

                 case CasosDeUso.BuscarEvaluacion:
                     BuscarEvaluacion(null);
                     break;

                 case CasosDeUso.NuevoCicloLectivo:
                     NuevoCicloLectivo_Click(null);
                     break;

                 case CasosDeUso.BuscarCicloLectivo:
                     BuscarCicloLectivo(null);
                     break;

                 case CasosDeUso.NuevoTurno:
                     NuevoTurno_Click(null);
                     break;

                 case CasosDeUso.BuscarTurno:
                     BuscarTurno(null);
                     break;

                 case CasosDeUso.NuevoGasto:
                     NuevoGasto_Click(null);
                     break;

                 case CasosDeUso.BuscarGasto:
                     BuscarGasto(null);
                     break;

                 case CasosDeUso.NuevoProyectoDidactico:
                     NuevoProyectoDidactico_Click(null);
                     break;

                 case CasosDeUso.BuscarProyectoDidactico:
                     BuscarProyectoDidactico(null);
                     break;

                 case CasosDeUso.NuevaActividadDidactica:
                     NuevaActividadDidactica_Click(null);
                     break;

                 case CasosDeUso.BuscarActividadDidactica:
                     BuscarActividadDidactica(null);
                     break;

                 case CasosDeUso.NuevaCategoriaGasto:
                     NuevaCategoriaGasto_Click(null);
                     break;

                 case CasosDeUso.BuscarCategoriaGasto:
                     BuscarCategoriaGasto(null);
                     break;

                 case CasosDeUso.IrMenuPrincipal:
                     IrMenuPrincipal(null);
                     break;


                 case CasosDeUso.NuevoDiaFeriado:
                     NuevoDiaFeriado_Click(null);
                     break;

                 case CasosDeUso.BuscarDiaFeriado:
                     BuscarDiaFeriado(null);
                     break;

                 case CasosDeUso.NuevaPlanificacionProyectoDidactico:
                     RealizarPlanificacionProyectoDidactico_Click(null);
                     break;

                 case CasosDeUso.BuscarPlanificacionProyectoDidactico:
                     BuscarPlanificacionProyectoDidactico(null);
                     break;


                 case CasosDeUso.NuevoParametroGeneral:
                     NuevoParametroGeneral_Click(null);
                     break;                              
  
                 case CasosDeUso.NuevoPagoInscripcion:
                     NuevoPagoInscripcionAlumno(null);
                     break; 


             }
         }

         private void OnEditarEntidad(CasosDeUso cu, Object entidad)
         {
             switch (cu)
             {
                 case CasosDeUso.NuevoAlumno:
                     NuevoAlumno_Click(entidad);
                     break;

                 case CasosDeUso.NuevoFamiliarAlumno:
                     NuevoFamiliarAlumno_Click(entidad);
                     break;

                 case CasosDeUso.InscribirAlumno:
                     InscribirAlumno_Click(entidad);
                     break;

                 case CasosDeUso.EvaluarAlumno:
                     EvaluarAlumno_Click(entidad, TipoEvaluacion.Ninguna);
                     break;

                 case CasosDeUso.EvaluarAlumno1año:
                     EvaluarAlumno_Click(entidad, TipoEvaluacion.UnoDosAños);
                     break;

                 case CasosDeUso.EvaluarAlumno3años:
                     EvaluarAlumno_Click(entidad, TipoEvaluacion.TresCuatroCincoAños);
                     break;

                 case CasosDeUso.NuevoCicloLectivo:
                     NuevoCicloLectivo_Click(entidad);
                     break;

                 case CasosDeUso.NuevoTurno:
                     NuevoTurno_Click(entidad);
                     break;

                 case CasosDeUso.NuevaCategoriaGasto:
                     NuevaCategoriaGasto_Click(entidad);
                     break;

                 case CasosDeUso.NuevoGasto:
                     NuevoGasto_Click(entidad);
                     break;

                 case CasosDeUso.NuevoProyectoDidactico:
                     NuevoProyectoDidactico_Click(entidad);
                     break;

                 case CasosDeUso.NuevaActividadDidactica:
                     NuevaActividadDidactica_Click(entidad);
                     break;

                 case CasosDeUso.NuevoPagoCuotaAlumno:
                     PagarCuotaAlumno_Click(entidad);
                     break;

                 case CasosDeUso.NuevoDiaFeriado:
                     NuevoDiaFeriado_Click(entidad);
                     break;

                 case CasosDeUso.NuevaPlanificacionProyectoDidactico:
                     RealizarPlanificacionProyectoDidactico_Click(entidad);
                     break;

             }
         }



    }
}
